package StackandQueue;

import java.util.Stack;

/**
 * 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串，判断字符串是否有效。
 * 左括号必须用相同类型的右括号闭合。
 * 左括号必须以正确的顺序闭合。
 * 注意空字符串可被认为是有效字符串。
 * 示例 1:
 * 输入: "()"
 * 输出: true
 * 示例 2:
 * 输入: "()[]{}"
 * 输出: true
 * 示例 3:
 * 输入: "(]"
 * 输出: false
 */
public class ValidBracket {

    public boolean isValid(String s){
        Stack<Character> stack = new Stack<>();
        char[] c = s.toCharArray();
        for(int i = 0; i < c.length; i++){
            if(c[i] == '(' || c[i] == '[' || c[i] == '{'){
                stack.push(c[i]);
            }else{
                if(stack.isEmpty()){
                    return false;
                }
                char top = stack.pop();
                if ((c[i] == ')' && top != '(') ||
                        (c[i] == ']' && top != '[') ||
                        (c[i] == '}' && top != '{')) {
                    // 如果不匹配，返回 false
                    return false;
                }
            }

        }
        return stack.isEmpty();

    }

}
